#include <stdio.h>
#include <QApplication>
#include "xffmpeg.h"
#include "mainwindow.h"
#include <QAudioOutput>





int main(int argc, char* argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
//    if(XFFmpeg::Get()->Open("test.mp4"))
//    {
//        printf("open success\n");
//    }
//    else
//    {
//        printf("open failed:%s\n", XFFmpeg::Get()->GetError().c_str());
//        return -1;
//    }
//    char *rgb = new char[800 * 600 * 4];
//    while(1)
//    {
//        AVPacket pkt = XFFmpeg::Get()->Read();
//        if(pkt.size == 0)
//            break;
//        printf("pts=%lld\n", pkt.pts);
//        if(pkt.stream_index != XFFmpeg::Get()->GetVideoStream())
//        {
//            av_packet_unref(&pkt);
//            continue;
//        }

//        AVFrame *yuv = XFFmpeg::Get()->Decode(pkt, NULL);
//        if(yuv)
//        {
//            printf("D\n");
//            XFFmpeg::Get()->ToRGB(yuv, rgb, 800, 600);
//            av_frame_free(&yuv);
//        }

//        av_packet_unref(&pkt);
//    }
//    av_register_all();
//    char* path = "test.mp4";
//    AVFormatContext *ic = NULL; //保存打开之后的信息
//    int ret = avformat_open_input(&ic, path, 0, 0);
//    if(ret != 0)
//    {
//        char buf[1024] = {0};
//        av_strerror(ret, buf, sizeof(buf));
//        printf("open %s failed:%s\n", path, buf);
//        return ret;
//    }

//    int total = ic->duration / AV_TIME_BASE;    //总秒数
//    qDebug()<<"file totalSec is"<<" "<<total<<endl;

//    int videoStream = 0;
//    AVCodecContext *videoCtx = NULL;
//    for(int i = 0; i < ic->nb_streams; i++)
//    {
//        AVCodecContext *enc = ic->streams[i]->codec;
//        if(enc->codec_type == AVMEDIA_TYPE_VIDEO)
//        {
//            videoStream = i;
//            AVCodec *decodec = avcodec_find_decoder(enc->codec_id);
//            if(!decodec)
//            {
//                qDebug()<<"video decode not find"<<endl;
//                return -1;
//            }
//            int err = avcodec_open2(enc, decodec, NULL);
//            if(err != 0)
//            {
//                char buf[1024] = {0};
//                av_strerror(err, buf, sizeof(buf));
//                qDebug()<<buf<<endl;
//                return err;
//            }
//            videoCtx = enc;
//            qDebug()<<"open decodec success"<<endl;
//        }

//    }
//    AVFrame *yuv = av_frame_alloc();

//    SwsContext *cCtx = NULL;    //解码器
//    int destW = 1024;
//    int destH = 960;
//    char* rgb = new char[destW * destH * 4];


//    while(1)
//    {

//        AVPacket pkt;
//        ret = av_read_frame(ic, &pkt);
//        if(ret != 0) break;
//        if(pkt.stream_index != videoStream)
//        {
//            av_packet_unref(&pkt);
//            continue;
//        }
//        int pts = pkt.pts * r2d(ic->streams[pkt.stream_index]->time_base) * 1000;
//        /*int got_picture = 0;
//        ret = avcodec_decode_video2(videoCtx, yuv, &got_picture, &pkt);
//        if(got_picture)
//        {
//            qDebug()<<"["<<ret<<"]";
//        }*/
//        ret = avcodec_send_packet(videoCtx, &pkt);
//        if(ret != 0)
//        {
//            av_packet_unref(&pkt);
//            continue;
//        }
//        ret = avcodec_receive_frame(videoCtx, yuv);
//        if(ret != 0)
//        {
//            av_packet_unref(&pkt);
//            continue;
//        }
//        qDebug()<<"D";

//        //打开转码器
//        cCtx = sws_getCachedContext(cCtx, videoCtx->width, videoCtx->height,
//                             videoCtx->pix_fmt, destW, destH, AV_PIX_FMT_BGRA,
//                             SWS_BICUBIC, NULL, NULL, NULL);
//        if(cCtx)
//        {
//            qDebug()<<"sws_getCachedContext success";
//        }
//        else
//        {
//            qDebug()<<"sws_getCachedContext failed";
//            break;
//        }

//        //转码
//        uint8_t *data[AV_NUM_DATA_POINTERS] = {0};
//        data[0] = (uint8_t *)rgb;
//        int linesize[AV_NUM_DATA_POINTERS] = {0};
//        linesize[0] = destW * 4;
//        int h = sws_scale(cCtx, yuv->data, yuv->linesize, 0, videoCtx->height,
//                  data, linesize);
//        if(h > 0)
//        {
//            qDebug()<<"("<<h<<")";
//        }

//        qDebug()<<"pts = "<<pts<<endl;
//        av_packet_unref(&pkt);
//    }

//    if(rgb)
//    {
//        delete []rgb;
//        rgb = NULL;
//    }

//    if(cCtx)
//    {
//        sws_freeContext(cCtx);
//        cCtx = NULL;
//    }

//    avformat_close_input(&ic);
//    ic = NULL;
    /*QApplication app(argc, argv);
    QWidget w;
    w.show();
    return app.exec();*/
    return 0;
}
